package one2one;

import java.util.LinkedList;
import java.util.List;

import junit.framework.TestCase;

import org.hibernate.Session;
import org.hibernate.Transaction;

import util.HibernateUtil;

/*
 */
public class Test extends TestCase {

	HibernateUtil util;

	@SuppressWarnings("unchecked")
	@Override
	protected void setUp() {
		List<Class> classes = new LinkedList<Class>();
		classes.add(User.class);
		// 这里我就加一个，因为我把account的映射配置也写在了User.hbm.xml
		// 如果加两个的话需要把Account.hbm.xml独立出来
		util = HibernateUtil.instance(classes);
	}

	public void testCreate() {
		final User user = new User();
		user.setUserName("agate");
		Account account = new Account();
		account.setPassword("123456");
		account.setBalance(3366.9);
		// 将关联对象加到主控对象中，
		// 这样主控对象才可以对关联对象进行级联（cascade）操作
		user.setAccount(account);
		// 同时须将主控对象加到关联对象中，
		// 关联对象才能够获取主控对象的唯一标识
		account.setUser(user);

		Session session = util.getSession();
		Transaction tx = session.beginTransaction();
		session.save(user);
		tx.commit();
		session.close();

		session = util.getSession();
		tx = session.beginTransaction();
		User u = (User) session.load(User.class, user.getId());
		assertEquals("123456", u.getAccount().getPassword());
		assertEquals(3366.9, u.getAccount().getBalance());
		assertEquals("agate", u.getUserName());
		tx.commit();
		session.close();

	}

}
